package io.gitee.yxsnake.framework.resource.api;

import com.github.lianjiatech.retrofit.spring.boot.core.RetrofitClient;
import io.gitee.yxsnake.framework.core.domain.Result;
import io.gitee.yxsnake.framework.resource.api.domain.RemoteSms;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Query;

import java.util.LinkedHashMap;
import java.util.List;

/**
 * @author snake
 * @description 短信服务
 * @since 2024/11/3 13:51
 */
@RetrofitClient(baseUrl = "${retrofit.pisces-resource-server:http://pisces-resource-server:21002/}")
public interface RemoteSmsService {

    /**
     * 同步方法：发送固定消息模板短信
     *
     * @param phone   目标手机号
     * @param message 短信内容
     * @return 封装了短信发送结果的 RemoteSms 对象
     */
    @GET(value = "inner/message/sendMessage")
    Result<RemoteSms> sendMessage(String phone, String message);

    /**
     * 同步方法：发送固定消息模板多模板参数短信
     *
     * @param phone    目标手机号
     * @param messages 短信模板参数，使用 LinkedHashMap 以保持参数顺序
     * @return 封装了短信发送结果的 RemoteSms 对象
     */
    @GET(value = "inner/message/sendMessageWithTemplate")
    Result<RemoteSms> sendMessageWithTemplate(String phone, LinkedHashMap<String, String> messages);

    /**
     * 同步方法：使用自定义模板发送短信
     *
     * @param phone      目标手机号
     * @param templateId 短信模板ID
     * @param messages   短信模板参数，使用 LinkedHashMap 以保持参数顺序
     * @return 封装了短信发送结果的 RemoteSms 对象
     */
    @GET(value = "inner/message/sendMessageWithCustomTemplate")
    Result<RemoteSms> sendMessageWithCustomTemplate(String phone, String templateId, LinkedHashMap<String, String> messages);

    /**
     * 同步方法：群发固定模板短信
     *
     * @param phones  目标手机号列表（1~1000）
     * @param message 短信内容
     * @return 封装了短信发送结果的 RemoteSms 对象
     */
    @GET(value = "inner/message/batchMessageTexting")
    Result<RemoteSms> batchMessageTexting(List<String> phones, String message);

    /**
     * 同步方法：使用自定义模板群发短信
     *
     * @param phones     目标手机号列表（1~1000）（1~1000）
     * @param templateId 短信模板ID
     * @param messages   短信模板参数，使用 LinkedHashMap 以保持参数顺序
     * @return 封装了短信发送结果的 RemoteSms 对象
     */
    @GET(value = "inner/message/messageTextingWithCustomTemplate")
    Result<RemoteSms> messageTextingWithCustomTemplate(List<String> phones, String templateId, LinkedHashMap<String, String> messages);

    /**
     * 异步方法：发送固定消息模板短信
     *
     * @param phone   目标手机号
     * @param message 短信内容
     */
    @GET(value = "inner/message/sendMessageAsync")
    Result<Boolean> sendMessageAsync(String phone, String message);

    /**
     * 异步方法：使用自定义模板发送短信
     *
     * @param phone      目标手机号
     * @param templateId 短信模板ID
     * @param messages   短信模板参数，使用 LinkedHashMap 以保持参数顺序
     */
    @GET(value = "inner/message/sendMessageAsyncWithCustomTemplate")
    Result<Boolean> sendMessageAsyncWithCustomTemplate(String phone, String templateId, LinkedHashMap<String, String> messages);

    /**
     * 延迟发送：发送固定消息模板短信
     *
     * @param phone       目标手机号
     * @param message     短信内容
     * @param delayedTime 延迟发送时间（毫秒）
     */
    @GET(value = "inner/message/delayMessage")
    Result<Boolean> delayMessage(String phone, String message, Long delayedTime);

    /**
     * 延迟发送：使用自定义模板发送定时短信
     *
     * @param phone       目标手机号
     * @param templateId  短信模板ID
     * @param messages    短信模板参数，使用 LinkedHashMap 以保持参数顺序
     * @param delayedTime 延迟发送时间（毫秒）
     */
    @GET(value = "inner/message/delayMessageWithCustomTemplate")
    Result<Boolean> delayMessageWithCustomTemplate(String phone, String templateId, LinkedHashMap<String, String> messages, Long delayedTime);

    /**
     * 延迟群发：群发延迟短信
     *
     * @param phones      目标手机号列表（1~1000）
     * @param message     短信内容
     * @param delayedTime 延迟发送时间（毫秒）
     */
    @GET(value = "inner/message/delayMessageTexting")
    Result<Boolean> delayMessageTexting(List<String> phones, String message, Long delayedTime);

    /**
     * 延迟群发：使用自定义模板发送群体延迟短信
     *
     * @param phones      目标手机号列表（1~1000）
     * @param templateId  短信模板ID
     * @param messages    短信模板参数，使用 LinkedHashMap 以保持参数顺序
     * @param delayedTime 延迟发送时间（毫秒）
     */
    @GET(value = "inner/message/delayMessageTextingWithCustomTemplate")
    Result<Boolean> delayMessageTextingWithCustomTemplate(List<String> phones, String templateId, LinkedHashMap<String, String> messages, Long delayedTime);

    /**
     * 加入黑名单
     *
     * @param phone 手机号
     */
    @GET(value = "inner/message/addBlacklist")
    Result<Boolean> addBlacklist(@Query("phone") String phone);

    /**
     * 加入黑名单
     *
     * @param phones 手机号列表
     */
    @GET(value = "inner/message/batchAddBlacklist")
    Result<Boolean> batchAddBlacklist(@Body List<String> phones);

    /**
     * 移除黑名单
     *
     * @param phone 手机号
     */
    @GET(value = "inner/message/removeBlacklist")
    Result<Boolean> removeBlacklist(@Query("phone") String phone);

    /**
     * 移除黑名单
     *
     * @param phones 手机号
     */
    @GET(value = "inner/message/batchRemoveBlacklist")
    Result<Boolean> batchRemoveBlacklist(@Body List<String> phones);

}

